#pragma once
#include <array>
#include <string>
#include <string_view>


enum Color {
    Black,
    Red,
    Blue,
    Green,
    Gray,
    Pink,
    Cyan
};

struct Fraction {
    int     numerator;
    int     denominator;
};


template <typename T>
struct Pair {
    T first {};
    T second {};
};


template <typename T>
constexpr T max(Pair<T> p) {
    return (p.first < p.second ? p.second : p.first);
}


enum class Animal {
    pig,
    chicken,
    goat,
    cat,
    dog,
    duck
};


std::string toAsciiLowerCase(std::string_view sv);


constexpr size_t N = 13;
constexpr void toAsciiLowerCase(const char input[N], char output[N]);


void testToAsciiLowerCaseNew();


void testColorStdOut();


void testHomeWork13_13();


void testAnimalLegs();


enum class MonsterType {
    MONSTER_ORGE,
    MONSTER_DRAGON,
    MONSTER_ORC,
    MONSTER_GIANT_SPIDER,
    MONSTER_SLIME,
};


struct Monster {
    MonsterType type {};
    std::string_view name {};
    int health {};
};


void testHomeWorkLast_01();


template <typename T>
struct Traid {
    T first {};
    T second {};
    T third {};
};

void testHomeWorkLast_03();
